Skip to main content

REST API 与 GraphQL 对比详解

REST 和 GraphQL 是现代 Web 应用中最主流的两种 API 接口设计方式。本页将带你理解两者的核心概念、使用场景、优劣对比以及实战代码示例。


🔍 什么是 REST API?

REST(Representational State Transfer)是一种以资源为中心的 API 设计风格。

方法描述示例
GET获取数据/users
POST创建数据/users
PUT更新资源/users/1
DELETE删除资源/users/1

🔌 什么是 GraphQL?

GraphQL 是 Facebook 开发的一种 API 查询语言,允许客户端精确指定需要的数据结构

  • 所有请求都通过一个统一入口(通常是 /graphql)完成。
  • 由客户端控制字段选择与嵌套层级。

⚖️ REST 与 GraphQL 对比

项目RESTGraphQL
请求路径多个 endpoint单一 endpoint
返回字段由后端决定客户端决定
数据量易过多或过少精准按需
请求次数多接口多次请求可一次请求多个资源
缓存支持强(支持 CDN)弱(需自建策略)
学习曲线较高

📦 场景推荐

场景推荐
快速开发后台管理系统REST
前端自由控制字段、移动端接口共享GraphQL
查询多个资源并组合GraphQL
高性能 + 缓存场景REST

🧑‍💻 实战代码示例

REST API 示例(Node.js Express)

const express = require("express");
const app = express();
app.use(express.json());

app.get("/users", (req, res) => res.json([{ id: 1, name: "Alice" }]));
app.post("/users", (req, res) => res.status(201).json(req.body));

app.listen(3000, () => console.log("REST API 监听中..."));

GraphQL 示例(Apollo Server)

const { ApolloServer, gql } = require("apollo-server");

const typeDefs = gql\`
type User {
id: ID!
name: String
}

type Query {
users: [User]
}
\`;

const resolvers = {
Query: {
users: () => [{ id: 1, name: "Alice" }]
}
};

const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => console.log(\`GraphQL 启动于 \${url}\`));

🔎 查询对比示例

REST 请求GraphQL 查询语句
GET /usersquery { users { id name } }
GET /users/1query { user(id: 1) { name } }
POST /usersmutation { createUser(name: "Jay") { id } }

🧠 常见问题解答

GraphQL 能替代 REST 吗?

不能完全替代,GraphQL 更适用于字段多变、多层嵌套或多端开发场景;REST 在缓存、安全、简单场景下仍有优势。

GraphQL 如何处理缓存?

需借助 Apollo Client 或 Relay 处理缓存,不支持 HTTP 层缓存。

REST API 能控制字段吗?

可以使用自定义字段参数,如 /users?fields=id,name,但远不如 GraphQL 灵活。


📚 推荐资源